package com.md.api.authentication;

import com.md.model.request.IdRequest;
import com.md.model.request.authentication.role.BindRoleApiRequest;
import com.md.model.request.authentication.role.InsertRoleRequest;
import com.md.model.request.authentication.role.QueryRoleRequest;
import com.md.model.request.authentication.role.UpdateRoleRequest;
import com.md.model.response.authentication.role.RoleDetailResponse;
import com.md.model.response.authentication.role.RoleResponse;
import com.md.model.system.CommonResult;
import com.md.model.system.PageResponse;
import com.md.value.constants.ApiConstants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @author 刘骄阳
 * 2022-05-20 0:18
 */
@Api(tags = {ApiConstants.ROLE})
public interface RoleApi {

  /**
   * 添加角色
   *
   * @param request 角色请求实体
   * @return 操作结果
   */
  @PostMapping("/role/insert")
  @ApiOperation("添加角色")
  CommonResult<Long> insert(@RequestBody @Validated @ApiParam("新增角色请求实体") InsertRoleRequest request);

  /**
   * 修改角色
   *
   * @param request 请求实体
   * @return 操作结果
   */
  @PostMapping("/role/update")
  @ApiOperation("修改角色")
  CommonResult<Boolean> update(@RequestBody @ApiParam("修改角色请求实体") @Validated UpdateRoleRequest request);

  /**
   * 绑定角色与权限
   *
   * @param request 角色权限绑定请求实体
   * @return 修改结果(true : 成功 ; false : 失败)
   */
  @PostMapping("/role/bind")
  @ApiOperation("绑定角色与权限")
  CommonResult<Boolean> bindRoleApi(@RequestBody @ApiParam("角色权限绑定请求实体") BindRoleApiRequest request);

  /**
   * 查询角色详情
   *
   * @param request 查询角色详情请求实体
   * @return 角色详情
   */
  @PostMapping("/role/query")
  @ApiOperation("查询角色详情")
  CommonResult<RoleDetailResponse> query(@RequestBody @ApiParam("查询角色详情请求实体") IdRequest request);

  /**
   * 查询角色列表
   *
   * @param request 查询角色列表请求实体
   * @return 角色列表
   */
  @PostMapping("/role/select/page")
  @ApiOperation("查询角色列表")
  CommonResult<PageResponse<RoleResponse>> selectPage(@RequestBody @ApiParam("查询角色列表请求实体") QueryRoleRequest request);
}
